package projeto.comercial.oportunidade.cdp;

import java.util.HashSet;
import java.util.Set;

import javax.persistence.CascadeType;
import javax.persistence.Entity;
import javax.persistence.FetchType;
import javax.persistence.ManyToOne;
import javax.persistence.OneToMany;
import javax.persistence.OrderBy;

import nucleo.comuns.util.UtilitarioSerializacao;
import plataforma.base.cdp.IObjetoComListaArquivo;
import plataforma.base.cdp.ObjetoPersistente;
import projeto.administrativo.colaboradorexterno.cdp.Contato;
import projeto.administrativo.colaboradorexterno.cdp.Informacao;
import projeto.administrativo.servico.cdp.KServico;
import projeto.comercial.gerenciarservico.cdp.Servico;

@Entity
public class OportunidadeServico extends ObjetoPersistente implements
		IObjetoComListaArquivo {

	private static final long serialVersionUID = UtilitarioSerializacao
			.getIDSerializacao();
	
	public OportunidadeServico() {
		clienteCadastrado = false;
	}


	SituacaoOportunidade situacao;

	
	private String descricao;
	private Set<Contato> contatos = new HashSet<Contato>();
	private Set<Informacao> informacoes = new HashSet<Informacao>();
	private Set<Interacao> interacoes = new HashSet<Interacao>();
	private KServico kServico;
	private boolean clienteCadastrado;

	private Servico servico;

	@ManyToOne(fetch=FetchType.LAZY)
	public Servico getServico() {
		return servico;
	}

	public void setServico(Servico servico) {
		this.servico = servico;
	}

	public SituacaoOportunidade getSituacao() {
		return situacao;
	}

	public void setSituacao(SituacaoOportunidade situacao) {
		this.situacao = situacao;
	}

	@ManyToOne(fetch = FetchType.LAZY)
	public KServico getkServico() {
		return kServico;
	}

	public void setkServico(KServico kServico) {
		this.kServico = kServico;
	}

	public boolean isClienteCadastrado() {
		return clienteCadastrado;
	}

	public void setClienteCadastrado(boolean clienteCadastrado) {
		this.clienteCadastrado = clienteCadastrado;
	}

	public String getNomePossivelCliente() {
		return nomePossivelCliente;
	}

	public void setNomePossivelCliente(String nomePossivelCliente) {
		this.nomePossivelCliente = nomePossivelCliente;
	}

	private String nomePossivelCliente;

	@OneToMany(cascade = CascadeType.ALL, fetch = FetchType.LAZY)
	@OrderBy("data")
	public Set<Interacao> getInteracoes() {
		return interacoes;
	}

	public void setInteracoes(Set<Interacao> interacoes) {
		this.interacoes = interacoes;
	}

	@OneToMany(cascade = CascadeType.ALL, fetch = FetchType.LAZY)
	@OrderBy("data")
	public Set<Informacao> getInformacoes() {
		return informacoes;
	}

	public void setInformacoes(Set<Informacao> informacoes) {
		this.informacoes = informacoes;
	}

	/**
	 * @return the descricao
	 */
	public String getDescricao() {
		return descricao;
	}

	/**
	 * @param descricao
	 *            the descricao to set
	 */
	public void setDescricao(String descricao) {
		this.descricao = descricao;
	}

	/**
	 * @return the contatos
	 */
	@OneToMany(cascade = CascadeType.ALL, fetch = FetchType.LAZY)
	public Set<Contato> getContatos() {
		return contatos;
	}

	/**
	 * @param contatos
	 *            the contatos to set
	 */
	public void setContatos(Set<Contato> contatos) {
		this.contatos = contatos;
	}

	@Override
	public Set recuperarArquivos() {

		return getInformacoes();
	}

}
